mod simplified;
mod wade_map;
use simplified::SIMPLIFIED;
use wade_map::WADE;

pub fn converter(input: &str) -> String {
    let mut result = String::with_capacity(input.len() * 2); // 预分配空间
    let mut is_first = true;

    for ch in input.chars() {
        // 使用了简单的简繁转换实现。
        // 实际使用过程中可以引用 Solution 6 中的解决方案，此处因重复故省略。
        let simplified = SIMPLIFIED.get(&ch).cloned().unwrap_or(ch);
        if let Some(wade) = WADE.get(&simplified) {
            if !result.is_empty() {
                result.push(' ');
            }
            if is_first {
                // 首字母大写处理
                if let Some(first) = wade.chars().next() {
                    result.push(first.to_ascii_uppercase());
                    result.push_str(&wade[first.len_utf8()..]);
                }
                is_first = false;
            } else {
                result.push_str(wade);
            }
        }
    }
    result
}
